#ifndef OBS_CONTEXT_WRAPPER_H
#define OBS_CONTEXT_WRAPPER_H

#include <obs.h>
#include <string>

/**
 * @brief OBS 上下文包装类，提供 RAII 风格的 OBS 初始化和清理
 * 
 * 这个类替代了旧版本 OBS 中的 OBSContext 类，提供自动的资源管理。
 * 在构造时初始化 OBS，在析构时自动清理。
 */
class OBSContextWrapper {
public:
    /**
     * @brief 构造函数，初始化 OBS
     * @param locale 本地化字符串，如 "en-US"
     * @param module_config_path 模块配置路径，可为 nullptr
     * @param store profiler 名称存储，可为 nullptr
     * @param auto_init 是否自动初始化，默认为 true
     */
    OBSContextWrapper(const char* locale = "en-US", 
                     const char* module_config_path = nullptr,
                     profiler_name_store_t* store = nullptr,
                     bool auto_init = true);
    
    /**
     * @brief 析构函数，自动清理 OBS
     */
    ~OBSContextWrapper();
    
    /**
     * @brief 禁用拷贝构造
     */
    OBSContextWrapper(const OBSContextWrapper&) = delete;
    
    /**
     * @brief 禁用拷贝赋值
     */
    OBSContextWrapper& operator=(const OBSContextWrapper&) = delete;
    
    /**
     * @brief 移动构造函数
     */
    OBSContextWrapper(OBSContextWrapper&& other) noexcept;
    
    /**
     * @brief 移动赋值运算符
     */
    OBSContextWrapper& operator=(OBSContextWrapper&& other) noexcept;
    
    /**
     * @brief 手动初始化 OBS
     * @return 初始化是否成功
     */
    bool Initialize();
    
    /**
     * @brief 手动清理 OBS
     */
    void Shutdown();
    
    /**
     * @brief 检查 OBS 是否已初始化
     * @return 是否已初始化
     */
    bool IsInitialized() const;
    
    /**
     * @brief 检查是否初始化成功
     * @return 初始化是否成功
     */
    bool IsValid() const { return initialized_; }
    
    /**
     * @brief 强制设置初始化状态（用于外部已经初始化的情况）
     * @param initialized 初始化状态
     */
    void SetInitialized(bool initialized) { initialized_ = initialized; }

private:
    std::string locale_;
    std::string module_config_path_;
    profiler_name_store_t* store_;
    bool initialized_;
    bool auto_init_;
};

#endif // OBS_CONTEXT_WRAPPER_H 